class AnalyzeWebpackPlugin {
    constructor() { }

    apply(compiler) {
        compiler.hooks.emit.tapAsync("AnalyzeWebpackPlugin", (compilation, callback) => {
            /* 将文件对象转换成一个二维数组
                对象：
                {
                    key1: value1,
                    key2: value2
                }
                二维数组：
                [
                    [key1, value1],
                    [key2, value2]
                ]
            */
            const assets = Object.entries(compilation.assets)
            /**
             * 构建 md 语法的文件内容
             * md 文件中表格的表述：
             *  | 资源名称 | 资源大小|
             *  | --- | --- |
             *  | xxx.js | 10kb |
             */
            let source = "# 分析打包资源大小 \n| 名称 | 大小 |\n| --- | --- |";
            assets.forEach(([filename, file]) => {
                source += `\n|${filename}|${(file.size() / 1024).toFixed(2)}kb|`
            })

            // 添加输出资源
            compilation.assets["analyze.md"] = {
                source() {
                    return source
                },
                size() {
                    return source.length
                }
            }
            callback()
        })
    }
}

module.exports = AnalyzeWebpackPlugin